importlib 模块: 通过字符串的形式导入对应的包或模块

注意: 只能导入到包或模块的级别,不能导入模块中的具体变量或方法

1. importlib的基本使用

# 总体的目录结构

├── importlib_demo
│   ├── i_package              # 包
│   │   ├── __init__.py
│   │   └── xx.py
│   └── i_d.py                 # 引入包的脚本文件

# importlib_demo/i_package/xx.py

name = 'Kevin'

def sum_num():
    return 1 + 2

  • importlib.import_module('包名.包名.模块名')

# i_d.py

import importlib

x = importlib.import_module('i_package.xx')  # 只能导入到包或模块的级别,不能导入模块中的具体变量或方法
print(x.name)  # Kevin
print(x.sum_num())  # 3

  • 通过字符串路径导入包或模块里面的变量

# i_package/xx.py

data = 'xx的变量'

# i_d.py

import importlib

path = 'i_package.xx.data'  # 字符串路径

xx_str, data_str = path.rsplit('.', maxsplit=1)  # 分割路径 -> i_package.xx, data
xx = importlib.import_module(xx_str)  # 通过字符串路径获取对应的模块
data = getattr(xx, data_str)  # 获取模板或包中的对应变量
print(data)  # xx的变量